// pages/cart/cart.js
// 引入api接口函数
import {
  findCartList,
  updateCheckedByIdAndIsChecked,
  deleteGoodsByGoodsId,
  addToCart,
  changeAllChecked,
} from '../../utils/api'
Page({
  /**
   * 页面的初始数据
   */
  data: {
    cartList: [], // 购物车列表数据
    isAllChecked: false, //全部选中状态
    totalPrice: 0, //总价
    totalCount: 0, //总数量
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {},

  // 封装一个获取购物车列表数据的功能函数
  async getCartList() {
    try {
      const result = await findCartList()
      if (result.code === 200) {
        // 更新data中的数据
        this.setData({
          cartList: result.data,
        })
      }
    } catch (error) {
      wx.showToast({
        title: '获取车列表数据获取失败',
      })
    }
  },
  // 用来更改购物车中商品的选中状态的功能函数
  async updateChecked(params) {
    try {
      // 调用接口传入参数
      const result = await updateCheckedByIdAndIsChecked(params)
      result.code === 200 && this.getCartList() // 刷新
    } catch (error) {
      console.log(error)
    }
  },
  // 复选框的change事件的回调函数
  changeCheckedHandler(event) {
    // id
    const goodsId = event.currentTarget.dataset.goodsid
    // 选中的状态
    const isChecked = event.detail ? 1 : 0
    this.updateChecked({ goodsId, isChecked })
  },

  // 根据id删除购物车中的商品的功能函数
  async deleteGoods(goodsId) {
    try {
      const result = await deleteGoodsByGoodsId(goodsId)
      result.code === 200 && this.getCartList()
    } catch (error) {
      console.log(error)
    }
  },
  // 删除购物车商品的事件对应的回调函数
  deleteGoodsHandler(event) {
    // 取出id
    const { goodsid, goodsname } = event.currentTarget.dataset
    wx.showModal({
      title: '您确定要删除吗?',
      content: goodsname,
      showCancel: true,
      cancelText: '取消',
      cancelColor: '#000000',
      confirmText: '确定',
      confirmColor: '#3CC51F',
      success: (res) => {
        res.confirm && this.deleteGoods(goodsid)
      },
    })
  },

  // 用来修改购物车中商品数量的功能函数
  async changeCount(params) {
    try {
      const result = await addToCart(params)
      result.code === 200 && this.getCartList()
    } catch (error) {
      console.log(error)
    }
  },
  // 改变数量的点击事件对应的回调函数
  changeCountHandler(event) {
    // event.detail中存储的是始终都是新的数量数据值
    let newCount = event.detail // 新值
    // 取出旧值的数量和商品的id
    let { count, id } = event.currentTarget.dataset
    this.changeCount({ goodsId: id, count: newCount - count })
  },
  async getCartList() {
    try {
      const result = await findCartList()
      // console.log(result);
      if (result.code === 200) {
        this.setData({
          cartList: result.data,
        })
        //
        this.computedAllChecked()
        this.computedTotalPrice()
        this.computedTotalCount()
      }
    } catch (error) {
      wx.showToast({
        title: '获取列表失败',
      })
    }
  },
  async changeAllChecked(isChecked) {
    try {
      const result = await changeAllChecked(isChecked)
      // console.log(result);
      if (result.code === 200) {
        this.getCartList()
        this.setData({
          isAllChecked: isChecked,
        })
      }
    } catch (error) {
      console.log(error)
    }
  },

  //全部选中或者全部取消的回调函数
  changeAllCheckedHandler() {
    let isAllChecked = !this.data.isAllChecked ? 1 : 0
    this.changeAllChecked(isAllChecked)
  },
  computedAllChecked() {
    this.setData({
      isAllChecked:
        this.data.cartList.every((item) => item.isChecked) &&
        this.data.cartList.length,
    })
  },
  computedTotalPrice() {
    this.setData({
      totalPrice: this.data.cartList.reduce(
        (pre, item) => (pre += item.count * item.price * item.isChecked),
        0
      ),
    })
  },
  computedTotalCount() {
    this.setData({
      totalCount: this.data.cartList.reduce(
        (pre, item) => (pre += item.count * item.isChecked),
        0
      ),
    })
  },
  //结算按钮的点击事件的回调函数
  toPayHandler() {
    if (!this.data.totalCount) {
      return
    }
    wx.navigateTo({
      url: '/pages/order/detail/detail',
    })
  },
  /**
   *
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.getCartList()
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {},
})
